package de.unicornEntertainment.stundenplanapp.threadTools;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Intent;
import android.os.AsyncTask;
import android.text.format.DateFormat;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.SimpleAdapter;
import de.unicornEntertainment.stundenplanapp.R;
import de.unicornEntertainment.stundenplanapp.abwesenheitsuebersicht.AbwesenheitenActivity;
import de.unicornEntertainment.stundenplanapp.lehreruebersicht.LehreruebersichtActivity;
import de.unicornEntertainment.stundenplanapp.login.ActivityLogin;
import de.unicornEntertainment.stundenplanapp.util.JSONParser;

public class MyAsyncTask_Abwesenheitsuebersicht extends AsyncTask {

		// Globale Deklaration
		private AbwesenheitenActivity context;
		private JSONArray abwesenheitsliste;
				
		// JSON Nodes
        private static final String TAG_IDABWESENHEIT = "IdAbwesenheit";
        private static final String TAG_LEHRERKURZNAME = "Kurzname";
        private static final String TAG_LEHRERNAME = "Name";
        private static final String TAG_GESAMTNAME = "Gesamtname";
        private static final String TAG_LEHRERVORNAME = "Vorname";
		private static final String TAG_ABWESENDAB = "AbwesendAb";
		private static final String TAG_ABWESENDBIS = "AbwesendBis";
		private static final String TAG_ABWESENHEIT = "abwesenheit";
		private SimpleDateFormat sdf = new SimpleDateFormat("dd.mm.yyyy");
		private SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-mm-dd");
		
		private String url = "http://gruppef.green-lagoon.de/login.php?head=abwesenheiten&user="+ActivityLogin.getUser()+"&passwort="+ActivityLogin.getPass();
		
		// ArrayList um Lehrerinfos zu Speichern
		private ArrayList<HashMap<String, String>> abwesenheiten;
		
		
		// Konstruktor
		public MyAsyncTask_Abwesenheitsuebersicht(AbwesenheitenActivity context) {
			this.context = context;
		}

		// Hintergrundverarbeitung in eigenem Thread
		@Override
		protected Object doInBackground(Object... arg0) {
			try {
				// JSON Parser instanziieren
				JSONParser jParser = new JSONParser();
				
				// JSON als String von URL abgreifen
				JSONObject abwesenheit = jParser.getJSONFromUrl(url);
				
//				System.out.println(S"JSON: " + lehrer.toString());
				
				// JSON-Array mit allen Lehrern abrufen
	            abwesenheitsliste = abwesenheit.getJSONArray(TAG_ABWESENHEIT);
	            
//	            System.out.println("Anzahl Lehrer im JSON-Array: " + lehrerliste.length());
	            
	            abwesenheiten = new ArrayList<HashMap<String,String>>();
	            
	            // Über alle Blöcke iterieren
	            for(int i = 0; i < abwesenheitsliste.length(); i++){
	                JSONObject einzelabwesenheit = abwesenheitsliste.getJSONObject(i);
	                 
	                // Jedes JSON-Item in eine Variable stellen
	                String idAbwesenheit = einzelabwesenheit.getString(TAG_IDABWESENHEIT);
	                String lehrerkurzname = einzelabwesenheit.getString(TAG_LEHRERKURZNAME);
	                String lehrername = einzelabwesenheit.getString(TAG_LEHRERNAME);
	                String lehrervorname = einzelabwesenheit.getString(TAG_LEHRERVORNAME);
	                String abwesendab = einzelabwesenheit.getString(TAG_ABWESENDAB);
	                String abwesendbis = einzelabwesenheit.getString(TAG_ABWESENDBIS);
//	                System.out.println("LehrerID: " + idLehrer); 
	                
	                try {
	                	Date von = sdf2.parse(abwesendab);
	                	Date bis = sdf2.parse(abwesendbis);
	                	abwesendab = sdf.format(von);
	                	abwesendbis = sdf.format(bis);
					} catch (ParseException e) {
						e.printStackTrace();
					}
	                // Eine neue HashMap erzeugen
	                HashMap<String, String> map = new HashMap<String, String>();
	                 
	                // adding each child node to HashMap key => value
	                map.put(TAG_IDABWESENHEIT, idAbwesenheit);
	                map.put(TAG_LEHRERKURZNAME, lehrerkurzname);
	                map.put(TAG_LEHRERNAME, lehrername);
	                map.put(TAG_GESAMTNAME, lehrername + ", " + lehrervorname + " - " +lehrerkurzname);
	                map.put(TAG_LEHRERVORNAME, lehrervorname);
	                map.put(TAG_ABWESENDAB, "Abwesend ab: " + abwesendab);
	                map.put(TAG_ABWESENDBIS, "Abwesend bis: " + abwesendbis);
	                
//	                System.out.println("HashMap-Inhalt: " + map);
	 
	                // HashMap zu ArrayList hinzufügen
	                context.getAbwesenheiten().add(map);
//	                Log.d("AsynTask", "HashMap: " + i);
				}
			}
			catch(JSONException e) {
				e.printStackTrace();
				
				// Dialog im Fehlerfall entlassen
				context.getPrg().dismiss();
			}
			return null;
		}
		
		// Nachbearbeitung im Vordergrund... Thread der GUI
		@Override
		protected void onPostExecute(Object result) {
			
			/**
	         * Die Daten aus den JSON-Objekten an den Adapter übergeben.
	         * */
	        context.setAdapter(new SimpleAdapter(context, context.getAbwesenheiten(),
	                R.layout.abwesenheiten_listview_row,
//	                new String[] {TAG_NAME, TAG_VORNAME, TAG_KURZNAME},
//	                new int[] {R.id.lehreruebersicht_listview_row_lehername,
//	        					R.id.lehreruebersicht_listview_row_lehervorname,
//	        					R.id.lehreruebersicht_listview_row_lehrerkuerzel }));
	                new String[] {TAG_GESAMTNAME, TAG_ABWESENDAB, TAG_ABWESENDBIS},
	                new int[] {R.id.abwesenheiten_textview_lehrername, R.id.abwesenheiten_textview_abwesendab, R.id.abwesenheiten_textview_abwesendbis
	        	}));
	 
	        // Adapter in der ListView registrieren 
	        context.getAbwesenheitsliste().setAdapter(context.getAdapter());
	        
	        // Dialog entlassen
	        context.getPrg().dismiss();
		}

}
